package com.mixsmart.web.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.mixsmart.commonweb.bean.BaseTree;
import com.mixsmart.commonweb.bean.entity.TCMenu;
import com.mixsmart.commonweb.service.impl.MenuService;
import com.mixsmart.core.bean.MixResponse;
import com.mixsmart.utils.StringUtils;

/**
 * 菜单控制器
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2016年2月2日
 */
@Controller
@RequestMapping("/menu")
public class MenuController extends BaseWebController {

	private static final String VIEW_DIR = WEB_BASE_VIEW_DIR+"/menu/";
	
	@Autowired
	private MenuService menuServ;
	
	@RequestMapping("/items.do")
	@ResponseBody
	public MixResponse<BaseTree<TCMenu>> items() {
		return menuServ.getMenuTreeByRole();
	}
	
	/**
	 * 菜单列表视图
	 * @return 返回菜单列表页面
	 */
	@RequestMapping("/list.do")
	public ModelAndView list() {
		ModelAndView modelView = new ModelAndView();
		modelView.setViewName(VIEW_DIR+"list");
		return modelView;
	}
	
	/**
	 * 添加菜单视图页面
	 * @param id 选中菜单ID（即：父菜单）
	 * @return 返回添加菜单视图
	 */
	@RequestMapping("/add.do")
	public ModelAndView add(String id) {
		ModelAndView modelView = new ModelAndView();
		ModelMap modelMap = modelView.getModelMap();
		modelMap.put("sortNum", menuServ.getSortNum(id));
		modelView.setViewName(VIEW_DIR+"add");
		return modelView;
	}
	
	/**
	 * 保存菜单数据（只能以post提交的方式请求）
	 * @param session HttpSession对象
	 * @param menu 菜单实体对象
	 * @return 返回MixResponse对象（即：操作结果，以json格式的形式返回数据）
	 */
	@RequestMapping(value="/save.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> save(HttpSession session, TCMenu menu) {
		MixResponse<String> mixResp = new MixResponse<String>();
		if(null != menu && StringUtils.isNotEmpty(menu.getName())) {
			try {
				if(menuServ.save(menu)) {
					mixResp.setData(menu.getId());
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg("菜单保存成功");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mixResp;
	}
	
	/**
	 * 编辑菜单视图页面
	 * @param id 选中菜单ID（即：要修改的菜单）
	 * @return 返回编辑菜单视图
	 */
	@RequestMapping("/edit.do")
	public ModelAndView edit(String id) {
		ModelAndView modelView = new ModelAndView();
		ModelMap modelMap = modelView.getModelMap();
		modelMap.put("objBean", menuServ.find(id));
		modelView.setViewName(VIEW_DIR+"edit");
		return modelView;
	}
	
	/**
	 * 修改菜单数据（只能以post提交的方式请求）
	 * @param session HttpSession对象
	 * @param menu 菜单实体对象
	 * @return 返回MixResponse对象（即：操作结果，以json格式的形式返回数据）
	 */
	@RequestMapping(value="/update.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> update(HttpSession session, TCMenu menu) {
		MixResponse<String> mixResp = new MixResponse<String>();
		mixResp.setMsg("菜单编辑失败");
		if(null != menu && StringUtils.isNotEmpty(menu.getId()) 
				&& StringUtils.isNotEmpty(menu.getName())) {
			try {
				if(menuServ.update(menu)) {
					mixResp.setData(menu.getId());
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg("菜单编辑成功");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mixResp;
	}
	
	/**
	 * 删除菜单（只能以post提交的方式请求）
	 * @param id 主键ID；多个id之间用英文逗号“,”分隔
	 * @return 返回MixResponse对象（即：操作结果，以json格式的形式返回数据）
	 */
	@RequestMapping(value="/delete.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> delete(String id) {
		MixResponse<String> mixResp = new MixResponse<String>();
		mixResp.setMsg("菜单删除失败");
		if(StringUtils.isNotEmpty(id)) {
			try {
				if(menuServ.delete(id)) {
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg("菜单删除成功");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mixResp;
	}
	
}
